#ifndef RUNSTYLES_H
#define RUNSTYLES_H


#include "Partitioning.h"


#ifdef SCI_NAMESPACE
namespace Scintilla {
#endif

  class RunStyles {
    private:
      Partitioning *starts;
      SplitVector<int> *styles;
      int RunFromPosition( int position ) const;
      int SplitRun( int position );
      void RemoveRun( int run );
      void RemoveRunIfEmpty( int run );
      void RemoveRunIfSameAsPrevious( int run );
      // Private so RunStyles objects can not be copied
      RunStyles( const RunStyles & );
    public:
      RunStyles();
      ~RunStyles();
      int Length() const;
      int ValueAt( int position ) const;
      int FindNextChange( int position, int end ) const;
      int StartRun( int position ) const;
      int EndRun( int position ) const;
      // Returns true if some values may have changed
      bool FillRange( int &position, int value, int &fillLength );
      void SetValueAt( int position, int value );
      void InsertSpace( int position, int insertLength );
      void DeleteAll();
      void DeleteRange( int position, int deleteLength );
      int Runs() const;
      bool AllSame() const;
      bool AllSameAs( int value ) const;
      int Find( int value, int start ) const;

      void Check() const;


      char *PersistantForm() const;
      void FromPersistant( const char *form );
      static bool PersistantSame( const char *form1, const char *form2 );

  };

  #ifdef SCI_NAMESPACE
}
  #endif

#endif
